package app.engine.component;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class AsyncFileWriter {

    private final ExecutorService executorService;

    public AsyncFileWriter() {
        this.executorService = Executors.newSingleThreadExecutor();
    }

    // 异步写入文件的方法
    public Future<?> writeToFileAsync(String filePath, String content) {
        return executorService.submit(() -> {
            try (FileWriter fileWriter = new FileWriter(filePath, true); // 追加写入
                 BufferedWriter bufferedWriter = new BufferedWriter(fileWriter)) {
                bufferedWriter.write(content);
                bufferedWriter.newLine(); // 换行
                // flush() 将缓冲区的数据写入文件，但不一定立即写入磁盘
                bufferedWriter.flush();
                // close() 会先调用 flush()，然后关闭流，释放资源，并确保数据写入磁盘（如果文件系统支持）
                // 在某些操作系统和文件系统中，close() 之后的数据同步到磁盘可能还需要额外的时间，
                // 但对于大多数用途来说，close() 已经足够保证数据的持久化。
            } catch (IOException e) {
                e.printStackTrace();
                // 可以在这里处理异常，例如记录日志或重新尝试写入
            }
        });
    }

    // 关闭ExecutorService，释放资源
    public void shutdown() {
        executorService.shutdown();
    }
}
